home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.1 (Developer) [x86] / NeXT Step 3.1 Intel dev.cdr.dmg / NextDeveloper / Makefiles / driverkit / Makefile.device_common next >
Makefile  |  1993-04-06  |  11KB  |  356 lines

  1. #
  2. # Common makefile fragment for use by driverkit-based driver projects.
  3. #
  4.  
  5. #
  6. # OBJROOT and SYMROOT are overridden by RC tools for builds from read-only
  7. # source.
  8. #
  9. OBJROOT= .
  10. SYMROOT= .
  11.  
  12. #
  13. # Macros used for compiling.
  14. #
  15. CFILES= $(COMMON_CFILES) $(MACHINE_COMMON_CFILES)
  16. MFILES= $(COMMON_MFILES) $(MACHINE_COMMON_MFILES)
  17. MD_CFILES=$(${MACHINE}_CFILES)
  18. MD_MFILES=$(${MACHINE}_MFILES)
  19.  
  20. COMMON_OFILES=     $(CFILES:.c=.o) $(MFILES:.m=.o)
  21. KERNEL_OFILES=     $(KERNEL_CFILES:.c=.o) $(KERNEL_MFILES:.m=.o)
  22. USER_OFILES=     $(USER_CFILES:.c=.o) $(USER_MFILES:.m=.o)
  23. MD_OFILES=    $(MD_CFILES:.c=.o) $(MD_MFILES:.m=.o)
  24.  
  25. IO_SERVER=
  26. #IO_SERVER= -DIOSERVER
  27.  
  28. #
  29. # For installsrc and tags.
  30. #
  31. COMMONSOURCE=  $(COMMON_MFILES) $(COMMON_CFILES) \
  32.     $(USER_MFILES) $(USER_CFILES) $(KERNEL_MFILES) $(KERNEL_CFILES) \
  33.     $(COMMON_PUBLIC_HFILES) $(COMMON_PRIVATE_HFILES) $(OTHER_SOURCE) 
  34.  
  35.  
  36. CFLAGS= -g -O -Wall -Wnoformat -I. -I.. -MD
  37. VPATH = $(OBJROOT)/$(BUILD_DIR):$(SYMROOT)/$(BUILD_DIR):$(MACHINE):$(OPT_VPATH)
  38. EXEC_LD= /bin/cc
  39. RELOC_LD= /bin/ld
  40. KL_LD= /usr/bin/kl_ld
  41.  
  42. m88k_CFLAGS=
  43. m68k_CFLAGS=    
  44. i386_CFLAGS=
  45. MD_CFLAGS=    $(${MACHINE}_CFLAGS)
  46.  
  47. #
  48. # For building user-level executable .o file.
  49. #
  50. # Forcing dependency on both SYMROOT and OBJROOT is necessary here to avoid
  51. # making actual binary builds dependent on the modify date of the directory 
  52. # they are in - in such a case, successive makes would repeatedly build the
  53. # binary since the modify time of one of its dependencies keeps getting
  54. # changed. If SYMROOT and OBJROOT are identical (as in normal developement
  55. # builds, in which case they're both '.'), we'll get a warning because
  56. # there will be two rules for building '.'. This won't break anything.
  57. #
  58. # NRW_BUILD is currently defined to allow testing of IODeviceNRW stuff on
  59. # 68k platforms.
  60. #
  61. release: $(SYMROOT) $(OBJROOT) always
  62.     @echo '********** Building $(MACHINE) release $(BUILD_NAME) **********'
  63.     make $(BUILD_NAME) \
  64.         "BUILD_DIR=$(MACHINE)release" \
  65.         "OBJROOT=$(OBJROOT)" \
  66.             "SYMROOT=$(SYMROOT)" \
  67.         "MACHINE=$(MACHINE)" \
  68.         "LIBS=$(RELEASE_LIBS)" \
  69.         "OFILES= $(COMMON_OFILES) $(USER_OFILES) $(MD_OFILES)" \
  70.         "LDFLAGS= $(RELEASE_LDFLAGS)" \
  71.         "OTHER_CFLAGS=$(RELEASE_CFLAGS) $(MD_CFLAGS) \
  72.         -arch $(MACHINE) $(IO_SERVER) "
  73.  
  74. debug: $(SYMROOT) $(OBJROOT) always
  75.     @echo '********** Building $(MACHINE) debug $(BUILD_NAME) **********'
  76.     make $(BUILD_NAME) \
  77.         "BUILD_DIR=$(MACHINE)debug" \
  78.         "OBJROOT=$(OBJROOT)" \
  79.             "SYMROOT=$(SYMROOT)" \
  80.         "MACHINE=$(MACHINE)" \
  81.         "CFLAGS=-DDEBUG -DDDM_DEBUG $(CFLAGS)" \
  82.         "LIBS=$(DEBUG_LIBS)" \
  83.         "OFILES= $(COMMON_OFILES) $(USER_OFILES) $(MD_OFILES)" \
  84.         "LDFLAGS= $(DEBUG_LDFLAGS)" \
  85.         "OTHER_CFLAGS=$(DEBUG_CFLAGS) $(MD_CFLAGS) \
  86.          -arch $(MACHINE) $(IO_SERVER) "
  87.  
  88. #
  89. # For building kern-loadable modules.
  90. #
  91. relocrelease: $(SYMROOT) $(OBJROOT) always
  92.     @echo '******** Building $(MACHINE) $(BUILD_NAME)_reloc ********'
  93.     make $(BUILD_NAME)_reloc \
  94.         "BUILD_DIR=$(MACHINE)relocrelease" \
  95.         "OBJROOT=$(OBJROOT)" \
  96.             "SYMROOT=$(SYMROOT)" \
  97.         "MACHINE=$(MACHINE)" \
  98.         "LIBS=$(RELEASE_KERN_LIBS)" \
  99.         "OFILES= $(COMMON_OFILES) $(KERNEL_OFILES) $(MD_OFILES)" \
  100.         "LDFLAGS= $(KL_RELEASE_FLAGS)" \
  101.         "OTHER_CFLAGS=$(RELEASE_CFLAGS) -arch $(MACHINE) \
  102.          -DKERNEL -DMACH_USER_API -I/LocalDeveloper/Headers"
  103.  
  104. relocdebug: $(SYMROOT) $(OBJROOT) always
  105.     @echo '******** Building $(MACHINE) debug $(BUILD_NAME)_reloc ********'
  106.     make $(BUILD_NAME)_reloc \
  107.         "BUILD_DIR=$(MACHINE)relocdebug" \
  108.         "OBJROOT=$(OBJROOT)" \
  109.             "SYMROOT=$(SYMROOT)" \
  110.         "MACHINE=$(MACHINE)" \
  111.         "LIBS=$(DEBUG_KERN_LIBS)" \
  112.         "OFILES= $(COMMON_OFILES) $(KERNEL_OFILES) $(MD_OFILES)" \
  113.         "LDFLAGS= $(KL_DEBUG_FLAGS)" \
  114.         "OTHER_CFLAGS=$(DEBUG_CFLAGS) -arch $(MACHINE) \
  115.          -DKERNEL -DMACH_USER_API -I/LocalDeveloper/Headers \
  116.          -DDEBUG -DDDM_DEBUG"
  117.  
  118. all:    targets lipoize tags
  119.  
  120. #
  121. # Build all targets. 
  122. #
  123. targets:    always
  124.     @if [ -n "$(RC_ARCHS_LOCAL)" ]; then                \
  125.         machines="$(RC_ARCHS_LOCAL)";                \
  126.     elif [ -n "$(RC_ARCHS)" ]; then                    \
  127.         machines="$(RC_ARCHS)";                    \
  128.     elif [ -n "$(MACHINE_LIST)" ]; then                \
  129.         machines="$(MACHINE_LIST)";                    \
  130.     elif [ -n "$(MACHINE)" ]; then                    \
  131.         machines="$(MACHINE)";                    \
  132.     else                                \
  133.         echo no machine list found;                    \
  134.         exit 1;                            \
  135.     fi;                                \
  136.     for machine in $$machines; do                       \
  137.         echo "========== Building all for $$machine ==========";    \
  138.         make $(TARGET_LIST)                     \
  139.             "MACHINE=$$machine"                      \
  140.             "OBJROOT=$(OBJROOT)"                    \
  141.             "SYMROOT=$(SYMROOT)"                    \
  142.             "DSTROOT=$(DSTROOT)";                    \
  143.     done
  144.  
  145. #
  146. # Create fat versions if necessary. If there is more than 
  147. # one machine in INSTALL_MACHINES, lipo together all 
  148. # architectures for each INSTALL_TARGET. In either case, 
  149. # installable target(s) are left in $(SYMROOT).
  150. #
  151. lipoize: always
  152.     @if [ -n "$(RC_ARCHS_LOCAL)" ]; then                \
  153.         machines="$(RC_ARCHS_LOCAL)";                \
  154.     elif [ -n "$(RC_ARCHS)" ]; then                    \
  155.         machines="$(RC_ARCHS)";                    \
  156.     elif [ -n "$(INSTALL_MACHINES)" ]; then                \
  157.         machines="$(INSTALL_MACHINES)";                \
  158.     elif [ -n "$(MACHINE)" ]; then                    \
  159.         machines="$(MACHINE)";                    \
  160.     else                                \
  161.         echo no machine list found;                    \
  162.         exit 1;                            \
  163.     fi;                                \
  164.     for target in $(TARGET_LIST); do                 \
  165.         if [ $$target = relocrelease ]; then            \
  166.         modname="$(BUILD_NAME)_reloc";                \
  167.         elif [ $$target = relocdebug ]; then            \
  168.         modname="$(BUILD_NAME)_reloc";                \
  169.         else                            \
  170.         modname="$(BUILD_NAME)";                \
  171.         fi;                                \
  172.         echo rm -f $(SYMROOT)/$$modname;                \
  173.         rm -f $(SYMROOT)/$$modname;                    \
  174.         if [ "`echo $$machines | wc -w`" -eq 1 ]; then        \
  175.             machine=$$machines;                    \
  176.             echo cp -p $(OBJROOT)/$$machine"`echo $$target`"/$$modname $(SYMROOT); \
  177.         cp -p $(OBJROOT)/$$machine"`echo $$target`"/$$modname $(SYMROOT); \
  178.         else                             \
  179.         args="";                        \
  180.         for machine in $$machines; do                \
  181.             args="$$args $(OBJROOT)/$$machine$$target""/$$modname"; \
  182.         done;                            \
  183.         echo lipo -create -output $(SYMROOT)/$$modname $$args;    \
  184.         lipo -create -output $(SYMROOT)/$$modname $$args;    \
  185.         fi;                                \
  186.     done
  187.  
  188. install: DSTROOT $(DSTROOT)/$(INSTALL_BIN_DIR) targets lipoize         \
  189.         installhdrs other_install
  190.     @echo cd $(SYMROOT);                        \
  191.     cd $(SYMROOT);                            \
  192.     for target in `echo $(INSTALL_TARGETS)`; do               \
  193.         if [ $$target = relocrelease ]; then            \
  194.             modname="$(BUILD_NAME)_reloc";            \
  195.         elif [ $$target = relocdebug ]; then            \
  196.             modname="$(BUILD_NAME)_reloc";            \
  197.         else                            \
  198.             modname="$(BUILD_NAME)";                \
  199.         fi;                                \
  200.         echo install $(INSTALLFLAGS) $$modname $(DSTROOT)$(INSTALL_BIN_DIR); \
  201.         install $(INSTALLFLAGS) $$modname                 \
  202.             $(DSTROOT)$(INSTALL_BIN_DIR);             \
  203.     done
  204.  
  205. installsrc:     SRCROOT $(SRCROOT)
  206. #    
  207. # first install the common source (in this directory).
  208. #
  209.     tar cf - $(COMMONSOURCE) Makefile | (cd $(SRCROOT); tar xpf -)    
  210. #
  211. # now install all of the machine-dependent source (if there is any).
  212. #
  213.     @if [ -n "${SOURCE_SUBDIRS}" ]; \
  214.     then \
  215.         SUBDIRS="$(SOURCE_SUBDIRS)"; \
  216.     else \
  217.         SUBDIRS=foo; \
  218.     fi; \
  219.     if [ -n "${SOURCE_SUBDIRS}" ]; \
  220.     then  \
  221.         for i in $$SUBDIRS; \
  222.         do \
  223.             echo ================= make $@ for $$i =================; \
  224.             (cd $$i; ${MAKE} SRCROOT=$(SRCROOT)/$$i $@) || exit $?; \
  225.         done \
  226.     fi
  227.     
  228. installhdrs:    DSTROOT $(DSTROOT)/$(INSTALL_HDR_DIR)
  229. #
  230. # first install the public header files from this directory.
  231.     @if [ -n "${COMMON_PUBLIC_HFILES}" ];         \
  232.     then                          \
  233.         echo install -c -m 644 $(COMMON_PUBLIC_HFILES) $(DSTROOT)$(INSTALL_HDR_DIR); \
  234.         install -c -m 644 $(COMMON_PUBLIC_HFILES)     \
  235.             $(DSTROOT)$(INSTALL_HDR_DIR);         \
  236.     fi
  237. #
  238. # now install all of the machine-dependent headers (if there are any).
  239. #
  240.     @if [ -n "${SOURCE_SUBDIRS}" ];         \
  241.     then                         \
  242.         SUBDIRS="$(SOURCE_SUBDIRS)";         \
  243.     else                         \
  244.         SUBDIRS=foo;                 \
  245.     fi;                         \
  246.     if [ -n "${SOURCE_SUBDIRS}" ];             \
  247.     then                          \
  248.         for i in $$SUBDIRS;             \
  249.         do                         \
  250.         echo ================= make $@ for $$i =================; \
  251.         (cd $$i; ${MAKE} DSTDIR=$(DSTROOT)$(INSTALL_HDR_DIR) $@) || exit $?; \
  252.         done                     \
  253.     fi;
  254.     
  255. $(OBJROOT)/$(BUILD_DIR) $(SYMROOT)/$(BUILD_DIR)          \
  256. $(DSTROOT)/$(INSTALL_BIN_DIR) $(DSTROOT)/$(INSTALL_HDR_DIR)     \
  257. $(OBJROOT) $(SRCROOT) $(SYMROOT):
  258.     mkdirs $@
  259.  
  260. tags:    $(OBJROOT) always
  261.     rm -f tags
  262.     ctags -o $(OBJROOT)/tags $(COMMONSOURCE)
  263.  
  264. always:
  265.  
  266. clean:
  267.     -rm -rf $(OBJROOT)/*debug         \
  268.         $(OBJROOT)/*release         \
  269.         $(OBJROOT)/*kerndebug         \
  270.         $(OBJROOT)/*kernrelease     \
  271.         $(OBJROOT)/*relocdebug         \
  272.         $(OBJROOT)/*relocrelease     \
  273.         $(SYMROOT)/$(BUILD_NAME) $(SYMROOT)/$(BUILD_NAME)_reloc \
  274.         *.d Makedep *~ tags $(OTHER_CLEAN_FILES) 
  275.     @if [ -n "${SOURCE_SUBDIRS}" ]; \
  276.     then \
  277.         SUBDIRS="$(SOURCE_SUBDIRS)"; \
  278.     else \
  279.         SUBDIRS=foo; \
  280.     fi; \
  281.     if [ -n "${SOURCE_SUBDIRS}" ]; \
  282.     then  \
  283.         for i in $$SUBDIRS; \
  284.         do \
  285.             echo ================= make $@ for $$i =================; \
  286.             (cd $$i; ${MAKE} $@) || exit $?; \
  287.         done \
  288.     fi
  289.  
  290. #
  291. # Build executable and relocatable .o.
  292. #
  293. # setting LDFLAGS to '-r' in the device-specific Makefile prevents
  294. # an executable from being generated.
  295. #
  296. # Main Makefile may define OTHER_DEPENDS.
  297. #
  298. $(BUILD_NAME): $(OBJROOT)/$(BUILD_DIR) $(OTHER_DEPENDS) $(OFILES)
  299.     $(LD) -arch $(MACHINE) $(LDFLAGS) -o $(OBJROOT)/$(BUILD_DIR)/$@ \
  300.         $(OFILES) $(LIBS)
  301.  
  302. #
  303. # Build kern-loadable relocatable.
  304. # Main Makefile Must define:
  305. #    SERVER_NAME
  306. #    KS_VAR_NAME
  307. #
  308. # May define:
  309. #    OTHER_DEPENDS (typically which will force a mig run). 
  310. #
  311. $(BUILD_NAME)_reloc: $(OBJROOT)/$(BUILD_DIR) \
  312.              $(OTHER_DEPENDS) $(OFILES) $(LOAD_COMMANDS) \
  313.              $(UNLOAD_COMMANDS)
  314.     @if [ -n "${UNLOAD_COMMANDS}" ]; \
  315.     then \
  316.         UNLOAD="-u $(UNLOAD_COMMANDS)"; \
  317.     else \
  318.         UNLOAD=" "; \
  319.     fi; \
  320.     echo $(KL_LD) -n $(SERVER_NAME) -l $(LOAD_COMMANDS) \
  321.         $$UNLOAD -i $(KS_VAR_NAME) $(LDFLAGS) \
  322.         -o $(OBJROOT)/$(BUILD_DIR)/$@  $(OFILES) $(LIBS); \
  323.     $(KL_LD) -n $(SERVER_NAME) -l $(LOAD_COMMANDS) \
  324.         $$UNLOAD -i $(KS_VAR_NAME) $(LDFLAGS) \
  325.         -o $(OBJROOT)/$(BUILD_DIR)/$@  $(OFILES) $(LIBS)
  326.  
  327. #
  328. # The additional -I here picks up possible header files which are
  329. # created in the build directory (say, by MIG).
  330. #
  331. .c.o:
  332.     $(CC) $(CFLAGS) $(OTHER_CFLAGS) -c $*.c \
  333.         -I$(OBJROOT)/$(BUILD_DIR) \
  334.         -dependency-file $(OBJROOT)/$(BUILD_DIR)/$*.d \
  335.         -o $(OBJROOT)/$(BUILD_DIR)/$*.o 
  336.     md -u $(OBJROOT)/$(BUILD_DIR)/Makedep -d $(OBJROOT)/$(BUILD_DIR)/$*.d
  337.  
  338. .m.o:
  339.     $(CC) $(CFLAGS) $(OTHER_CFLAGS) -c $*.m \
  340.         -I$(OBJROOT)/$(BUILD_DIR) \
  341.         -dependency-file $(OBJROOT)/$(BUILD_DIR)/$*.d \
  342.         -o $(OBJROOT)/$(BUILD_DIR)/$*.o 
  343.     md -u $(OBJROOT)/$(BUILD_DIR)/Makedep -d $(OBJROOT)/$(BUILD_DIR)/$*.d
  344.  
  345. SRCROOT DSTROOT:
  346.     @if [ -n "${$@}" ]; \
  347.     then \
  348.         exit 0; \
  349.     else \
  350.         echo Must define $@; \
  351.         exit 1; \
  352.     fi
  353.  
  354. -include Makedep
  355.  
  356.